package com.ccc.scala.base5_function

object Function9_Recursion {
  def main(args: Array[String]): Unit = {
    // 递归
    def myRecursion(num: Int): Int = {
      if (num < 1) {
        return 1
      }
      num * myRecursion(num - 1)
    }

    val i = myRecursion(5)
    println(i) // 120

    // 尾递归（伪递归）
    // Scala中尾递归实际上不是真正的递归，是由编译器进行优化，形成了while循环。
    // 所以应该说是伪递归
    def test(): Unit = {
      println("cj")
      test()
    }

    test()

    // 如果是普通递归，那就会出现StackOverflowError
    def test1(): Unit = {
      test1()
      println("cj")
    }
  }
}
